{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Physics-Informed Neural Networks (PINNs) in JAX\n",
    "\n",
    "Simple example of training a PINN in JAX using the Equinox deep learning framework to solve the 1D Poisson equation with homogeneous Dirichlet boundary conditions on the unit interval.\n",
    "\n",
    "$$\n",
    "\\begin{align}\n",
    "    \\frac{\\partial^2 u}{\\partial x^2} &= - f(x), \\quad x \\in (0, 1) \\\\\n",
    "    u(0) &= u(1) = 0\n",
    "\\end{align}\n",
    "$$"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### What are PINNs and how to train them?\n",
    "\n",
    "A PINN is a **coordinate network** that attempts to approximate the solution to a partial differential equation $\\hat{u}_\\theta(t, x) \\approx u(t, x)$. The network is trained to minimize the residuum of the partial differential equation, the boundary conditions, and the initial conditions (if applicable, here we just have a stationary problem). Hence, it can be data-free; additional supervised reference information is optional. Derivative information is obtained via higher-order input-output automatic differentiation of the neural network.\n",
    "\n",
    "The typical architecture for PINNs are Multi-Layer Perceptrons whose inputs are the position in space $x$ (can be higher dimensional) and time $t$ (if applicable). The output of the network is the solution $\\hat{u}_\\theta(t, x)$ at the given position and time.\n",
    "\n",
    "In our case, the parameters are found by minimizing the following composite loss\n",
    "\n",
    "$$\n",
    "\\theta^* = \\arg\\min_\\theta \\mathcal{L}(\\theta) = \\arg\\min_\\theta \\left( \\mathcal{L}_\\text{PDE}(\\theta) + \\mathcal{L}_\\text{BC}(\\theta) \\right)\n",
    "$$\n",
    "\n",
    "with the PDE residuum given as the **mean squared error of the residual at randomly sampled collocation points inside the domain**\n",
    "\n",
    "$$\n",
    "\\mathcal{L}_\\text{PDE}(\\theta) = \\frac{1}{2L} \\sum_{i=1}^{L} \\left( \\frac{\\partial^2 \\hat{u}_\\theta}{\\partial x^2}\\bigg|_{x=x^{[i]}} + f(x^{[i]}) \\right)^2\n",
    "\\qquad \\text{with} \\qquad\n",
    "x^{[i]} \\sim \\mathcal{U}(0, 1)\n",
    "$$\n",
    "\n",
    "and the boundary conditions given as the **mean squared error of the solution at randomly sampled boundary points** (here we can just use the left and right boundary points)\n",
    "\n",
    "$$\n",
    "\\mathcal{L}_\\text{BC}(\\theta) = \\frac{1}{2} \\left( \\hat{u}_\\theta(0) - 0 \\right)^2 + \\frac{1}{2} \\left( \\hat{u}_\\theta(1) - 0 \\right)^2\n",
    "$$"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### The part with automatic differentiation\n",
    "\n",
    "The idea of PINNs goes back to works in 90s, but experiences a renaissance due to easily available higher-order autodiff engines in deep learning frameworks.\n",
    "\n",
    "In order to train PINNs to solve PDEs with the highest derivative order being $k$, we need $k+1$ autodiff passes because after the assembly of the loss function, gradient information needs to be backpropagated into the parameter space of the network. We need this information to update the parameters via gradient-based optimizers (like ADAM). In other words, we use the AD engine to then produce $\\frac{\\partial \\mathcal{L}}{\\partial \\theta}$."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### A reference solution by Finite Differences\n",
    "\n",
    "To check whether the network a learned meaningful solution to the PDE, we use a three-point stencil reference solution.\n",
    "\n",
    "1. Discretize the unit intervale domain into $N+2$ points, but only consider $N$ interior points.\n",
    "2. Solve the linear system of equations $A u = b$ with $A \\in \\mathbb{R}^{N \\times N}$ and $b \\in \\mathbb{R}^N$ with\n",
    "    1. $A$ being due to the three point-stencil (tri-diagonal matrix with $1$ on the off-diagonals and $-2$ on the diagonal, scaled by $\\frac{1}{(\\Delta x)^2}$)\n",
    "    2. $b$ being the right-hand side of the PDE evaluated at the interior points, i.e., $b_i = - f(x_i)$\n",
    "3. Sandwich the boundary conditions to the solution vector $u$ and plot the solution."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### The concrete scenario\n",
    "\n",
    "We consider a discontinuous right-hand side\n",
    "\n",
    "$$\n",
    "f(x) = \\begin{cases}\n",
    "    1 & \\text{if } x > 0.3 \\land x < 0.5 \\\\\n",
    "    0 & \\text{otherwise}\n",
    "\\end{cases}"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Changes in comparison to the YouTube video:\n",
    "\n",
    "1. Use correct `init_key` for initializing the neural network\n",
    "2. Change `N_OPTIMIZATION_EPOCHS` to `10_000`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "import jax\n",
    "import jax.numpy as jnp\n",
    "import jax.random as jr\n",
    "import equinox as eqx\n",
    "import optax\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "N_DOF_FD = 100\n",
    "N_COLLOCATION_POINTS = 50\n",
    "LEARNING_RATE = 1e-3\n",
    "N_OPTIMIZATION_EPOCHS = 10_000\n",
    "BC_LOSS_WEIGHT = 100.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Reproducibility\n",
    "key = jr.PRNGKey(42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Our PINN is a coordinate network in the form of a MLP, mapping from scalar to scalar values\n",
    "key, init_key = jr.split(key)\n",
    "pinn = eqx.nn.MLP(\n",
    "    in_size=\"scalar\",\n",
    "    out_size=\"scalar\",\n",
    "    width_size=10,\n",
    "    depth=4,\n",
    "    activation=jax.nn.sigmoid,\n",
    "    key=init_key,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Array(-0.68502796, dtype=float32)"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pinn(0.2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "mesh_full = jnp.linspace(0.0, 1.0, N_DOF_FD + 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "mesh_interior = mesh_full[1:-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "rhs_function = lambda x: jnp.where((x > 0.3) & (x < 0.5), 1.0, 0.0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "rhs_evaluated = rhs_function(mesh_interior)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [],
   "source": [
    "dx = mesh_interior[1] - mesh_interior[0]\n",
    "A = jnp.diag(jnp.ones(N_DOF_FD - 1), -1) + jnp.diag(jnp.ones(N_DOF_FD - 1), 1) - jnp.diag(2 * jnp.ones(N_DOF_FD), 0)\n",
    "A /= dx**2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "finite_difference_solution = jnp.linalg.solve(A, -rhs_evaluated)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "wrap_bc = lambda u: jnp.pad(u, (1, 1), mode=\"constant\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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LaEUedlFp6mX70LZpiq7oU2bNol6vV5cv369ePToUXHixImiv7+/mJ2dLYqiKD7xxBPi7NmzpfV3794tajQacfny5WJ6erqYkJDAQ8GrqaaxfuWVV0SdTid+/vnnYlZWlnS7fv16fb0Fl1DTON+MR0tVT03jfPbsWdHX11eMi4sTMzIyxG+++UZs1qyZuGTJkvp6Cy6hpnFOSEgQfX19xU8++UT8888/xR07doitW7cWH3300fp6Cy7h+vXr4q+//ir++uuvIgBxxYoV4q+//iqeOXNGFEVRnD17tvjEE09I69sOBZ8xY4aYnp4urlq1ioeC32reeust8fbbbxd1Op3Yq1cv8ZdffpGe69evnzh27Fi79f/3v/+J7dq1E3U6ndipUydx69atCvfYddUk1nfccYcIoNwtISFB+Y67mJr+TZfF5Kb6ahrnn3/+WYyIiBD1er0YFhYmvvzyy6LZbFa4166nJnE2mUziggULxNatW4teXl5iaGioOHnyZPHq1avKd9yFfP/99w73t7bYjh07VuzXr1+5bbp16ybqdDoxLCxM/OCDD2TtoyCKHHsjIiIi98E5N0RERORWmNwQERGRW2FyQ0RERG6FyQ0RERG5FSY3RERE5FaY3BAREZFbYXJDREREboXJDREREbkVJjdERETkVpjcEBERkVthckNERERuhckNERERuZX/D9qEubdCVIV8AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(mesh_full, wrap_bc(rhs_evaluated), label=\"Forcing Function\")\n",
    "plt.plot(mesh_full, wrap_bc(finite_difference_solution), label=\"Finite Difference solution\")\n",
    "plt.plot(mesh_full, jax.vmap(pinn)(mesh_full), label=\"Initial PINN solution\")\n",
    "plt.legend()\n",
    "plt.grid()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "def pde_residuum(network, x):\n",
    "    return jax.grad(jax.grad(network))(x) + rhs_function(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Array(-2.5913748e-06, dtype=float32, weak_type=True)"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pde_residuum(pinn, 0.8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [],
   "source": [
    "key, sampling_key = jr.split(key)\n",
    "collocation_points = jr.uniform(sampling_key, (N_COLLOCATION_POINTS, ), minval=0.0 + 0.001, maxval=1.0 - 0.001)\n",
    "\n",
    "def loss_fn(network):\n",
    "    pde_residuum_at_collocation_points = jax.vmap(pde_residuum, in_axes=(None, 0))(network, collocation_points)\n",
    "    pde_loss_contribution = 0.5 * jnp.mean(jnp.square(pde_residuum_at_collocation_points))\n",
    "\n",
    "    left_bc_residuum = network(0.0) - 0.0\n",
    "    right_bc_residuum = network(1.0) - 0.0\n",
    "    bc_residuum_contribution = 0.5 * jnp.mean(jnp.square(left_bc_residuum)) + 0.5 * jnp.mean(jnp.square(right_bc_residuum))\n",
    "\n",
    "    total_loss = pde_loss_contribution + BC_LOSS_WEIGHT * bc_residuum_contribution\n",
    "\n",
    "    return total_loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Array(47.01226, dtype=float32)"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "loss_fn(pinn)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 0, loss: 47.01226043701172\n",
      "Epoch: 100, loss: 0.8580574989318848\n",
      "Epoch: 200, loss: 0.08999805152416229\n",
      "Epoch: 300, loss: 0.08999675512313843\n",
      "Epoch: 400, loss: 0.08999650180339813\n",
      "Epoch: 500, loss: 0.08999619632959366\n",
      "Epoch: 600, loss: 0.0899958610534668\n",
      "Epoch: 700, loss: 0.08999550342559814\n",
      "Epoch: 800, loss: 0.0899951159954071\n",
      "Epoch: 900, loss: 0.08999469131231308\n",
      "Epoch: 1000, loss: 0.08999423682689667\n",
      "Epoch: 1100, loss: 0.08999376744031906\n",
      "Epoch: 1200, loss: 0.08999325335025787\n",
      "Epoch: 1300, loss: 0.0899927169084549\n",
      "Epoch: 1400, loss: 0.08999215066432953\n",
      "Epoch: 1500, loss: 0.08999156206846237\n",
      "Epoch: 1600, loss: 0.08999092876911163\n",
      "Epoch: 1700, loss: 0.0899902731180191\n",
      "Epoch: 1800, loss: 0.08998958021402359\n",
      "Epoch: 1900, loss: 0.08998885750770569\n",
      "Epoch: 2000, loss: 0.08998807519674301\n",
      "Epoch: 2100, loss: 0.08998725563287735\n",
      "Epoch: 2200, loss: 0.0899863913655281\n",
      "Epoch: 2300, loss: 0.08998546749353409\n",
      "Epoch: 2400, loss: 0.0899844840168953\n",
      "Epoch: 2500, loss: 0.08998341113328934\n",
      "Epoch: 2600, loss: 0.08998227119445801\n",
      "Epoch: 2700, loss: 0.08998103439807892\n",
      "Epoch: 2800, loss: 0.08997968584299088\n",
      "Epoch: 2900, loss: 0.08997821062803268\n",
      "Epoch: 3000, loss: 0.08997660130262375\n",
      "Epoch: 3100, loss: 0.08997482806444168\n",
      "Epoch: 3200, loss: 0.08997286856174469\n",
      "Epoch: 3300, loss: 0.0899706557393074\n",
      "Epoch: 3400, loss: 0.08996818959712982\n",
      "Epoch: 3500, loss: 0.08996541053056717\n",
      "Epoch: 3600, loss: 0.08996225148439407\n",
      "Epoch: 3700, loss: 0.08995865285396576\n",
      "Epoch: 3800, loss: 0.08995452523231506\n",
      "Epoch: 3900, loss: 0.08994977921247482\n",
      "Epoch: 4000, loss: 0.0899442583322525\n",
      "Epoch: 4100, loss: 0.08993782103061676\n",
      "Epoch: 4200, loss: 0.08993027359247208\n",
      "Epoch: 4300, loss: 0.08992136269807816\n",
      "Epoch: 4400, loss: 0.08991082012653351\n",
      "Epoch: 4500, loss: 0.08989828079938889\n",
      "Epoch: 4600, loss: 0.08988329768180847\n",
      "Epoch: 4700, loss: 0.0898653119802475\n",
      "Epoch: 4800, loss: 0.08984367549419403\n",
      "Epoch: 4900, loss: 0.08981746435165405\n",
      "Epoch: 5000, loss: 0.08978553861379623\n",
      "Epoch: 5100, loss: 0.08974632620811462\n",
      "Epoch: 5200, loss: 0.08969774097204208\n",
      "Epoch: 5300, loss: 0.08963676542043686\n",
      "Epoch: 5400, loss: 0.08955925703048706\n",
      "Epoch: 5500, loss: 0.08945932984352112\n",
      "Epoch: 5600, loss: 0.0893288254737854\n",
      "Epoch: 5700, loss: 0.08915648609399796\n",
      "Epoch: 5800, loss: 0.08892654627561569\n",
      "Epoch: 5900, loss: 0.0886165052652359\n",
      "Epoch: 6000, loss: 0.08819276094436646\n",
      "Epoch: 6100, loss: 0.08760202676057816\n",
      "Epoch: 6200, loss: 0.08675193041563034\n",
      "Epoch: 6300, loss: 0.0854535773396492\n",
      "Epoch: 6400, loss: 0.08320115506649017\n",
      "Epoch: 6500, loss: 0.07853132486343384\n",
      "Epoch: 6600, loss: 0.06901650875806808\n",
      "Epoch: 6700, loss: 0.0530269555747509\n",
      "Epoch: 6800, loss: 0.03805118054151535\n",
      "Epoch: 6900, loss: 0.031987547874450684\n",
      "Epoch: 7000, loss: 0.02948779985308647\n",
      "Epoch: 7100, loss: 0.02781803160905838\n",
      "Epoch: 7200, loss: 0.026349671185016632\n",
      "Epoch: 7300, loss: 0.02487153559923172\n",
      "Epoch: 7400, loss: 0.023290695622563362\n",
      "Epoch: 7500, loss: 0.021622132509946823\n",
      "Epoch: 7600, loss: 0.019978314638137817\n",
      "Epoch: 7700, loss: 0.01843317039310932\n",
      "Epoch: 7800, loss: 0.016949016600847244\n",
      "Epoch: 7900, loss: 0.015463732182979584\n",
      "Epoch: 8000, loss: 0.01393019501119852\n",
      "Epoch: 8100, loss: 0.01232096366584301\n",
      "Epoch: 8200, loss: 0.010657898150384426\n",
      "Epoch: 8300, loss: 0.009047052823007107\n",
      "Epoch: 8400, loss: 0.007672507781535387\n",
      "Epoch: 8500, loss: 0.00668884115293622\n",
      "Epoch: 8600, loss: 0.006090256851166487\n",
      "Epoch: 8700, loss: 0.005749566946178675\n",
      "Epoch: 8800, loss: 0.005556473974138498\n",
      "Epoch: 8900, loss: 0.0054466878063976765\n",
      "Epoch: 9000, loss: 0.005383532028645277\n",
      "Epoch: 9100, loss: 0.005345368292182684\n",
      "Epoch: 9200, loss: 0.005319844000041485\n",
      "Epoch: 9300, loss: 0.005300417542457581\n",
      "Epoch: 9400, loss: 0.005284121260046959\n",
      "Epoch: 9500, loss: 0.005269498564302921\n",
      "Epoch: 9600, loss: 0.005256093107163906\n",
      "Epoch: 9700, loss: 0.0052435314282774925\n",
      "Epoch: 9800, loss: 0.005231547635048628\n",
      "Epoch: 9900, loss: 0.005220117978751659\n"
     ]
    }
   ],
   "source": [
    "# Training loop\n",
    "optimizer = optax.adam(LEARNING_RATE)\n",
    "opt_state = optimizer.init(eqx.filter(pinn, eqx.is_array))\n",
    "\n",
    "@eqx.filter_jit\n",
    "def make_step(network, state):\n",
    "    loss, grad = eqx.filter_value_and_grad(loss_fn)(network)\n",
    "    updates, new_state = optimizer.update(grad, state, network)\n",
    "    new_network = eqx.apply_updates(network, updates)\n",
    "    return new_network, new_state, loss\n",
    "\n",
    "loss_history = []\n",
    "for epoch in range(N_OPTIMIZATION_EPOCHS):\n",
    "    pinn, opt_state, loss = make_step(pinn, opt_state)\n",
    "    loss_history.append(loss)\n",
    "    if epoch % 100 == 0:\n",
    "        print(f\"Epoch: {epoch}, loss: {loss}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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0/FHjmlOTs4xx7zjtRMdk5GRoZSUlGh/nF6nsrJSu3bt0rhx4+R2u+V2u/X666/rwQcflNvtVnZ2NuMcBYMGDVJBQUGn58455xxt375d0uFxOtG/ETk5Odq1a1en1/1+v/bu3RvWn0Wiu/POO0OzLqNHj9bNN9+sH/zgB6EZRcY6+qwc0+MdE+6YE1xOwuPxaPz48aqoqAg9FwwGVVFRoZKSEhsr672MMZo1a5aeffZZvfbaaxo2bFin18ePH6+kpKROY7p582Zt3749NKYlJSXauHFjp/9YXnnlFWVkZIR+iJSUlHR6j45jTpU/ly9/+cvauHGjqqqqQl8TJkzQTTfdFPo94xy5888/v8ty/i1btuj000+XJA0bNkw5OTmdxqihoUGrVq3qNM779u1TZWVl6JjXXntNwWBQxcXFoWNWrFihtra20DGvvPKKzj77bPXr1y9mn6832b9/v5zOzj+WXC6XgsGgJMY6Fqwc06j9WxJWK+8p6umnnzZer9csWLDAVFdXm+9973umb9++nVZi4LBbb73VZGZmmuXLl5tPP/009LV///7QMbfccovJz883r732mlm7dq0pKSkxJSUlodc7lul+9atfNVVVVWbp0qXmtNNOO+Yy3TvvvNO89957xufznVLLdI/lyFVFxjDO0bB69WrjdrvNL3/5S/PBBx+YJ5980qSmpponnngidMx9991n+vbta/72t7+Zd955x1xxxRXHXE46duxYs2rVKvPmm2+a4cOHd1pOum/fPpOdnW1uvvlms2nTJvP000+b1NTUhF2ieyzTp083gwcPDi2HfuaZZ0xWVpb50Y9+FDqGsQ5fY2OjWb9+vVm/fr2RZB544AGzfv168/HHHxtjrBvTt956y7jdbvNf//Vf5r333jP33nsvy6Fj6Xe/+53Jz883Ho/HTJw40bz99tt2l9RrSTrm15/+9KfQMQcOHDC33Xab6devn0lNTTXTpk0zn376aaf3+cc//mGmTp1qUlJSTFZWlvnhD39o2traOh2zbNkyU1hYaDwejznjjDM6neNUdHRwYZyj47nnnjOjRo0yXq/XjBgxwjz88MOdXg8Gg+anP/2pyc7ONl6v13z5y182mzdv7nTMZ599Zm644QaTlpZmMjIyzIwZM0xjY2OnYzZs2GAuuOAC4/V6zeDBg819990X88/WmzQ0NJjZs2eb/Px8k5ycbM444wzz4x//uNMSW8Y6fMuWLTvmv8nTp083xlg7pn/961/NF77wBePxeMzIkSPN888/H/bncRhzxJaEAAAAvRg9LgAAIG4QXAAAQNwguAAAgLhBcAEAAHGD4AIAAOIGwQUAAMQNggsAAIgbBBcAABA3CC4AACBuEFwAAEDcILgAAIC4QXABAABx4/8Dz4AG6qYpSm8AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(loss_history)\n",
    "plt.yscale(\"log\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(mesh_full, wrap_bc(finite_difference_solution), label=\"Finite Difference solution\")\n",
    "plt.plot(mesh_full, jax.vmap(pinn)(mesh_full), label=\"Final PINN solution\")\n",
    "plt.legend()\n",
    "plt.grid()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Array(0.0417731, dtype=float32)"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pinn(0.33)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Array(0.09539172, dtype=float32, weak_type=True)"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "jax.grad(pinn)(0.33)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "265371ff1b98b9f4eaa16d44fb1eb5bb5e02f4557e1c68186d1d500959ccd159"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
